在昨天的文章[Day 25]-【STM32系列】串列通訊的老祖宗:UART中我們稍微提到了關於UART的相關知識,如果有興趣的朋友們可以先去了解一下再來,那接續上一篇光用說的並不能解釋完全,所以今天我將實作UART傳輸部分,你可能會注意到有人寫UART/USART,甚麼是USART呢?其實就是UART的強化版!
UART:Universal Asynchronous Receiver/Transmitter,通用非同步收發傳輸器。
USART:Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步非同步收發傳輸器。
從字面意思我們也可以知道USART比UART增加了一部分同步的功能,同步的意思指是否有透過clock,是同步收發器和異步收發器最大的區別,這取決於硬體的連接。也就是說我們可以拿USART來替代SPI當恰好缺少一個SPI串口的時候。SPI跟I²C、UART一樣也是一種通訊協定,我們改天再做一期文章來討論這個SPI。
回到我們今天的主題,UART 串列傳送分成三種模式:
輪詢(Polling):就是阻塞式詢問,CPU都不幹別的事了,就整天在那邊問你說:「現在有沒有要傳資料啊?」沒有要傳我就繼續等,總是在那邊詢問、等待。這種方最土法煉鋼、這就是輪詢的缺點,效率太低,占用cpu時間。
中斷(Interrupt):沒有收到數據時,執行其他的程序,收到數據後,進入中斷處理通訊。與輪詢相對來說,不用循環查詢狀態暫存器,可以有更多的時間運行其他程序。
DMA(Direct Memory Access):直接記憶體存取。串列數據的接收與發送由DMA處理,DMA說:「我把接收、傳送的資料放在記憶體的某個位置,你如果需要就自己去那個位置提取」。DMA也可以分為輪詢與中斷方式。資料的發送與接收都不用CPU干預,通過DMA進行。 CPU有更多的時間運行其他程序。
預設STM32微控制器的PA2(TX)和PA3(RX)上的USART2端口連接到 ST-LINK 燒錄器連接到你的電腦,代表只要開啟UART2並插上USB就可以與電腦連線,如果你想用UART2與其他擴充板通訊,可以將你Nucle開發板上SB62、SB63短路, SB13、SB14開路(原始狀態SB62、SB63開路, SB13、SB14短路)。
在這種情況下,可以將其他USART端口接到ST-LINK 燒錄器, 例如,在NUCLEO-L053R8上,可以使用PA2 (TX)和PA3(RX)上的USART2。 需要連接兩條跳線:
這裡我再推一個軟體,hercules setup utility一個好用的Socket測試工具,我們將用它來接收、發送UART/USART數據,其實他還支援很多功能,例如:UDP/IP終端和TCP/IP客戶端和服務器終端,重點是他免費也好用,Win10目前也支援,算是一個老牌工具了。
請先官網下載:https://www.hw-group.com/software/hercules-setup-utility
- STM32 Nucleo-64 boards (MB1136)資料手冊
https://www.st.com/resource/en/user_manual/dm00105823-stm32-nucleo-64-boards-mb1136-stmicroelectronics.pdf- STM32L053R8 datasheet
https://www.st.com/resource/en/datasheet/stm32l053r8.pdf- RM0367 Reference manual Ultra-low-power STM32L0x3 advanced Arm®-based 32-bit MCUs
https://www.st.com/resource/en/reference_manual/dm00095744-ultra-low-power-stm32l0x3-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf- ARM Mbed官網介紹 - NUCLEO-L053R8
https://os.mbed.com/platforms/ST-Nucleo-L053R8/- STM32 官網介紹 - STM32L053R8
https://www.st.com/en/microcontrollers-microprocessors/stm32l053r8.html#overview
- 此開發板售價在臺幣1000元以下,讀者可於以下網站購得:
https://www.mouser.tw/
https://www.digikey.tw/
這是一個陰謀論...